package cn.wolfcode.crm.util;

import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.method.HandlerMethod;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 异常处理: spring中的所有异常都交给这个处理
 */
@ControllerAdvice  //date   //给controller类添加异常处理功能
public class ExceptionsHandlerUtil {

    //所有异常都交给这个方法处理
    //如果有参数, 表示只处理指定异常类型
    @ExceptionHandler(UnauthorizedException.class)
    //参数1:表示当前请求方法的方法对象
    public void handleException(HandlerMethod method, HttpServletRequest req,
                                HttpServletResponse resp) throws IOException {
        //如何区分是ajax请求还是普通页面访问
        //分析: 如果是ajax请求, 那么对应的请求方法上贴有@ResponseBody标签
        ResponseBody ann = method.getMethodAnnotation(ResponseBody.class);
        if(ann != null){
            //ajax请求
            resp.setContentType("text/json;charset=utf-8");
            resp.getWriter().write("{\"success\":false, \"msg\":\"没有操作权限\"}");
        }else{
            //普通请求, 跳转到没有权限提示页面
            resp.sendRedirect("/nopermission.jsp");
        }
    }
}
